#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pii pair<long long,long long>
#define pb push_back
#define mp make_pair
const int mod=998244353;
int fpow(int x,int b)
{
    if(!b) return 1;
    if(!x) return 0;
    int res=1;
    while(b)
    {
        if(b&1) res=1LL*res*x%mod;
        b>>=1;
        x=1LL*x*x%mod;
    }
    return res;
}
int ifac[20000005];
void init(int x)
{
    ifac[0]=1;
    int fac=1;
    for(int i=1;i<=x;i++) fac=1LL*fac*i%mod;
    ifac[x]=fpow(fac,mod-2)%mod;
    for(int i=x-1;i>=1;i--) ifac[i]=1LL*ifac[i+1]*(i+1)%mod;
}
int calc(int n,int m)
{
    if(m>n) return 0;
    int res=0;
    for(int i=0;i<=m;i++)
    {
        int x=fpow(i,n)*ifac[i]%mod*ifac[m-i]%mod;
        if((m-i)&1) res=(res-x+mod)%mod;
        else res=(res+x)%mod;
    }
    return res;
}
int n,m;
// int dp[1005][1005];
int G0[20000005],G1[20000005],pw[20000005];
void solve()
{
    cin>>n>>m;
    // dp[0][0]=1;
    // for(int i=0;i<m;i++)  for(int j=0;j<=n;j++) for(int d=j;d<=m;d++) dp[i+1][d]=(dp[i+1][d]+dp[i][j]*d)%mod;
    // for(int i=1;i<=m;i++)
    // {
    //     for(int j=1;j<=n;j++) 
    //     {
    //         int s=0;
    //         for(int l=0;l<=j;l++) s=(s+dp[i][l])%mod;
    //         cout<<s<<" ";
    //     }
    //     cout<<"\n";
    // }
    init(20000000);
    int ans=0;
    n=min(n,m); 
    pw[1]=1;
    for(int i=2;i<=n;i++) if(!pw[i])
    {
        pw[i]=fpow(i,m);
        for(int j=i+i,l=2;j<=n;j+=i,l++) if(!pw[j]) pw[j]=pw[i]*pw[l]%mod;
    }
    for(int i=0;i<=n;i++)  
    {
        if(i) G0[i]=G0[i-1],G1[i]=G1[i-1];
        int x=pw[i]*ifac[i]%mod;
        if(i&1) x=(mod-x)%mod;
        if(i&1) G1[i]=(G1[i]+x)%mod;
        else G0[i]=(G0[i]+x)%mod;
    }
    for(int i=0;i<=n;i++)
    {
        int x=ifac[i];
        if(i&1) ans=(ans+x*(G1[n-i]-G0[n-i]+mod))%mod;
        else ans=(ans+x*(G0[n-i]-G1[n-i]+mod))%mod;
    }
    // for(int i=1;i<=n;i++) ans=(ans+calc(m,i))%mod;
    // for(int i=n,j=m-n;i>=1;i--,j++) if(j>=0) ans=(ans+calc(m,i))%mod;
    cout<<ans<<"\n";
}
signed main()
{
    freopen("drama.in","r",stdin);
    freopen("drama.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int _=1;
    // cin>>_;
    while(_--) solve();
    return 0;
}

/*
g++ -o drama drama.cpp -O2 -std=c++14 -Wall -Wextra -Wconversion -Wshadow
*/